#include<bits/stdc++.h>

using namespace std ;

const int maxn = 30 ;

int n , maxV , maxValue ;

int w[maxn] , c[maxn] ;

void dfs(int index , int sumW , int sumC) {
    if(index == n) {
        //如果顺利的把所有的都插进去了就退出
        return ;
    }

    dfs(index + 1 , sumW , sumC) ;  //不加这物品的话就不用判断
    if(sumW + w[index] <= maxV) {
        if(sumC + c[index] > maxValue) {
            maxValue = sumC + c[index] ;
        }
        dfs(index + 1 , sumW + w[index] , sumC + c[index]) ;
    }
}

int main (){

    scanf("%d%d" , &n , &maxV);
    for (int i = 0; i < n; ++i) {
        scanf("%d" , &w[i]);
    }
    for (int i = 0; i < n; ++i) {
        scanf("%d" , &c[i]);
    }

    dfs(0 , 0 , 0);

    printf("%d" , maxValue);

    return 0 ;
}